package com.jiazixuan.stock.mapper;

import com.jiazixuan.stock.pojo.domain.*;
import com.jiazixuan.stock.pojo.entity.StockRtInfo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author 17127
* @description 针对表【stock_rt_info(个股详情信息表)】的数据库操作Mapper
* @createDate 2025-08-14 11:17:57
* @Entity com.jiazixuan.stock.pojo.entity.StockRtInfo
*/
public interface StockRtInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockRtInfo record);

    int insertSelective(StockRtInfo record);

    StockRtInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockRtInfo record);

    int updateByPrimaryKey(StockRtInfo record);

    /**
     * 查询指定时间的股票数据集合
     * @param curDate 日期时间
     * @return
     */
    List<StockUpdownDomain> getStockInfoByTime(@Param("curDate") Date curDate);

    List<StockUpdownDomain> getStockInfoByTimeAnd4(@Param("curDate") Date lastDate);

//    @MapKey("time")
    List<Map> getStockUpdownCount(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("flag") int flag);

    List<Map> getUpDown(@Param("curTime") Date curTime);

    /**
     * 功能描述：查询单个个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据
     *          如果当前日期不在有效时间内，则以最近的一个股票交易时间作为查询时间点
     * @param code 股票编码
     * @return
     */
    List<Stock4MinuteDomain> getstockScreenTimeSharing(@Param("openDate") Date openDate, @Param("endDate") Date endDate, @Param("code") String code);

    /**
     * 查询指定时间范围内每天的最后一个交易时间
     */
    List<Date> listMaxCurTimePerDay(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("code") String code);

    /**
     * 根据指定时间点集合获取个股日K数据
     */
    List<Stock4EvrDayDomain> listStockInfoByCurTimes(@Param("code") String code, @Param("times") List<Date> times);

    /**
     * 批量插入个股数据
     * @param list
     * @return
     */
    int insertBatch(@Param("list") List<StockRtInfo> list);

    /**
     * 周K聚合数据（不含开收盘价）
     */
    List<Stock4EvrWeekDomain> listWeekStock(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("code") String code);

    /**
     * 获取个股最新分时行情数据
     */
    StockNewMinuteDomain getStockNew(@Param("date") Date date, @Param("code") String code);

    /**
     * 查询最新交易流水
     */
    List<StockTransactionFlow> getStockTransactionFlow(@Param("code") String code);
}
